<?php

declare(strict_types=1);

namespace app\model;

use app\model\base\BaseConfigModel;
use think\facade\Cache;

/**
 * 
 *
 * @mixin \think\Model
 * @property int $id 自增id
 * @property string $type 分类
 * @property string $name 名称
 * @property string $field 字段
 * @property string $value 字段值
 * @property string $premium_rate 字段值
 * @property string $created_at 创建时间
 * @property string $updated_at 更新时间
 */
class Config extends BaseConfigModel
{
    //权益全局副标题显示方式
    const BRAND_SUBTITLE_QJ = 1;
    const BRAND_SUBTITLE_ZDY = 2;

    const TYPE_COUPON = 'coupon';
    const PROXY_GLOBAL_PREMIUM_RATIO = 'proxy_global_premium_ratio';
    const PLATFORM_GLOBAL_PREMIUM_RATIO = 'platform_global_premium_ratio';

    //定义缓存key
    const PLATFORM_GLOBAL_PREMIUM_RATIO_CACHE = 'coupon_config_coupon_platform_global_premium_ratio'; //平台
    const PROXY_GLOBAL_PREMIUM_RATIO_CACHE = 'coupon_config_coupon_proxy_global_premium_ratio';       //代理

    //获取权益后台全局溢价配置费率
    public function getPremiunRate()
    {
        return self::query()->where('type', 'coupon')->where('field', 'premium_rate')->value('value');
    }

    //获取后台溢价比例
    public function getPlatformPremiumRate()
    {
        return self::query()->where('type', 'coupon')
            ->where('field', 'platform_global_premium_ratio')
            //todo 缓存30天,在使用数据迁移修改的时候一定需要将缓存重新生成
            ->field('id, type, field, value')
            ->cache(self::PLATFORM_GLOBAL_PREMIUM_RATIO_CACHE, 30*24*3600)
            ->find();

    }

    //获取代理统一溢价比例
    public function getAgentPremiumRate()
    {
        return self::query()->where('type', 'coupon')
            ->where('field', 'proxy_global_premium_ratio')
            //todo 缓存30天,在使用数据迁移修改的时候一定需要将缓存重新生成
            ->field('id, type, field, value')
            ->cache(self::PROXY_GLOBAL_PREMIUM_RATIO_CACHE, 30*24*3600)
            ->find();
    }

    //重新生成缓存，避免溢价比较不及时更新
    public static function onAfterUpdate($module)
    {
        /**
         * @var Config $module
         * @var Config $config
         */
        if (!$module->isEmpty()) {
            $config = self::query()->where('id', $module->id)->field('id, type, field')->find();
            if ($config->getAttr('type') == self::TYPE_COUPON && in_array($config->getAttr('field'), [self::PROXY_GLOBAL_PREMIUM_RATIO, self::PLATFORM_GLOBAL_PREMIUM_RATIO])){
                Cache::set(self::PLATFORM_GLOBAL_PREMIUM_RATIO_CACHE, NULL);
                Cache::set(self::PROXY_GLOBAL_PREMIUM_RATIO_CACHE, NULL);
            }
        }
    }

}
